home *** CD-ROM | disk | FTP | other *** search
- ///////////////////////////////////////////////////////////////
- //
- // Module : INV00.PRG
- //
- // Created by SUMMER'93 (c) on Fri Nov 26 14:49:41 1993
- //
- ///////////////////////////////////////////////////////////////
- #include "snj.ch"
- procedure INVMAIN
- // Calls: INVSAY INVCLEAR INVGET PARTSHOW INVTOT QBPROMPT INVEDIT INVFIND INVDEL INVOUT
- // Called By: BODYWORK
- // I N V 0 0
- // Main controlling routine for Invoices
- local INVCOM, PINVNO
-
- PINVNO := INVCOM := 0
-
- select 0
- use INVOICE index INVNUM alias INVOICE
- select 0
- use PARTS index PARTINV
- select 0
- use PARTLINE
- set deleted on
- QBCHOICE( 1 )
- do INVSAY with .f.
-
- do while .t.
-
- INVCLEAR( )
- do INVGET with .f.
- select PARTLINE
- zap
- do PARTSHOW with 15, 1, 10
- select INVOICE
- do INVTOT
- INVCOM := QBPROMPT( "Add|Edit|Delete|Print|Quit|", ;
- "Add a new invoice, or Fetch existing" )
-
- PINVNO := MINVNO()
- do case
- case INVCOM = 1 // Add
- MEDITING( .f. )
- do INVEDIT with 0
- case INVCOM = 2 // Edit
- INVFIND( .t. )
- if MINVNO() > 0
- MEDITING( .t. )
- PINVNO := MINVNO()
- do INVEDIT with PINVNO
- endif
- case INVCOM = 3 // Delete
- INVFIND( .f. )
- if MINVNO() > 0
- PINVNO := MINVNO()
- do INVDEL with PINVNO
- endif
- case INVCOM = 4 // Print
- INVFIND( .f. )
- if MINVNO() > 0
- PINVNO := MINVNO()
- do INVOUT with PINVNO
- endif
- case INVCOM = 5 .or. INVCOM = 0
- exit
- endcase
- QBCHOICE( 4 )
- enddo
- close database
-
- return
-
- //*****************************************************************
-
- procedure INVEDIT( PINVNO ) // Amended by SUMMER93
- // Calls: INVADD SINVNO QBPROMPT INVSAVE INVFILL INVGET PARTSHOW INVTOT QBMESS INVOUT INVREN INVCLEAR INVSAY INVPAY INVINSLB INVVEH PARTEDIT
- // Called By: INVMAIN
- // I N V E D I T
- local IACTION, EACTION, INVSTAT, DEFCOM
-
-
- select INVOICE
- INVSTAT := 0
- if PINVNO = 0
- MINVNO( INVADD( 0 ) )
- IACTION := 99
- EACTION := 1
- else
- IACTION := 2
- EACTION := 0
- endif
- if MINVNO() = 0
- return
- endif
- DEFCOM := 4
- do while .t.
-
- // Get headers etc
- SINVNO( )
- if IACTION = 0
- IACTION := QBPROMPT( "Save|Edit|Abandon|Print|Renumber|Quit|", ;
- "Actions on this Invoice, Exit", DEFCOM )
- DEFCOM := IACTION
- endif
-
- do case
- case IACTION = 1
- INVSTAT := INVSAVE( )
- IACTION := EACTION := 0
- DEFCOM := 6
- case IACTION = 2
- EACTION := QBPROMPT( ;
- "Owner|Credit terms|Insurance/Labour|Vehicle/Dates|Parts/Paint etc|Quit|";
- , "Select Invoice area to update", EACTION + 1 )
- INVSTAT := 1
- DEFCOM := 1
- case IACTION = 3
- INVSTAT := INVFILL( .t. )
- do INVGET with .f.
- do PARTSHOW with 15, 1, 10
- do INVTOT
- IACTION := EACTION := 0
- if MINVNO() = 0
- do QBMESS with "Invoice not present in Database - returning", ;
- COLFLASH() , 5
- return
- endif
- case IACTION = 4
- do INVOUT with (MINVNO() )
- IACTION := EACTION := 0
- case IACTION = 5
- do INVREN
- IACTION := EACTION := 0
- case IACTION = 6 .or. IACTION = 0 // MIB 23/10/90
- if INVSTAT = 1 .and. MINVTOTAL() > 0
- do QBMESS with "Invoice changed - Save or Abandon first", ;
- COLHEAD() , 5
- IACTION := EACTION := 0
- else
- do INVCLEAR
- do INVSAY with .f.
- exit
- endif
- endcase
-
- GETOUT( .f. )
- do case
- case EACTION = 1 // Owner
- do INVGET with .t.
- IACTION := 2 // Get back to the right menu in Add mode
- case EACTION = 2 // Payment
- do INVPAY with .t.
- case EACTION = 3 // Insurance/Labour
- do INVINSLB with .t.
- case EACTION = 4 // Vehicle
- do INVVEH with .t.
- case EACTION = 5 // Parts
- do PARTEDIT with 15, 1, 10, PINVNO
- do PARTSHOW with 15, 1, 10
- endcase
- do INVTOT
-
- if GETOUT() .or. EACTION = 6 .or. EACTION = 0
- IACTION := EACTION := 0
- endif
- enddo
-
- return
-
- //*****************************************************************
-
- function INVFILL( DOPART ) // Amended by SUMMER93
- // Calls: PARTLOAD
- // Called By: INVEDIT INVFIND REPREV REPWIP
- // The following locals have been declared by Summer'93
- // PSTAT
- local PSTAT
- // I N V F I L L
-
- MINVNO( INVOICE->INVNO )
- MSPEEDO( INVOICE->SPEEDO )
- MFUEL( INVOICE->FUEL )
- MPARTDISC( INVOICE->PARTDISC )
- MVATRATE( INVOICE->VATRATE )
- MOWNNAME( INVOICE->OWNNAME )
- MOWNINIT( INVOICE->OWNINIT )
- MOWNADD1( INVOICE->OWNADD1 )
- MOWNADD2( INVOICE->OWNADD2 )
- MOWNADD3( INVOICE->OWNADD3 )
- MMAKEMODEL( INVOICE->MAKEMODEL )
- MINSCO( INVOICE->INSCO )
- MINSADD1( INVOICE->INSADD1 )
- MINSADD2( INVOICE->INSADD2 )
- MINSENG( INVOICE->INSENG )
- MINSTEL( INVOICE->INSTEL )
- MPAINT( INVOICE->PAINT )
- MTRIM( INVOICE->trim )
- MOWNTELH( INVOICE->OWNTELH )
- MOWNTELB( INVOICE->OWNTELB )
- MOWNVAT( INVOICE->OWNVAT )
- MINSTOPAY( INVOICE->INSTOPAY )
- MACTYPE( INVOICE->ACTYPE )
- MWORKTYPE( INVOICE->WORKTYPE )
- MDATEIN( INVOICE->DATEIN )
- MDATEOUT( INVOICE->DATEOUT )
- MDATEINV( INVOICE->DATEINV )
- MREGNO( INVOICE->REGNO )
- MYEAR( INVOICE->year )
- MENGNO( INVOICE->ENGNO )
- MCHASNO( INVOICE->CHASNO )
- MESTNO( INVOICE->ESTNO )
- MLABESTNO( INVOICE->LABESTNO )
- MCLAIMNO( INVOICE->CLAIMNO )
- MLABOUR1( INVOICE->LABOUR1 )
- MLABOUR2( INVOICE->LABOUR2 )
- MLABOUR3( INVOICE->LABOUR3 )
- MLABOUR4( INVOICE->LABOUR4 )
- MLABOURT( INVOICE->LABOURT )
- MINSLAB( INVOICE->INSLAB )
- MOWNLAB( INVOICE->OWNLAB )
- MINSPART( INVOICE->INSPART )
- MOWNPART( INVOICE->OWNPART )
- MINSSPEC( INVOICE->INSSPEC )
- MOWNSPEC( INVOICE->OWNSPEC )
- MINSAMT( INVOICE->INSAMT )
- MOWNAMT( INVOICE->OWNAMT )
- MEXCESS( INVOICE->EXCESS )
- MCONTRIB( INVOICE->CONTRIB )
- MINSDUE( INVOICE->INSDUE )
- MOWNDUE( INVOICE->OWNDUE )
- MINVTOTAL( INVOICE->INVTOTAL )
- MCUSTTYP( INVOICE->CUSTTYPE )
- ML2TEXT( INVOICE->L2TEXT )
- ML3TEXT( INVOICE->L3TEXT )
- ML4TEXT( INVOICE->L4TEXT )
-
- if DOPART
- PSTAT := PARTLOAD( MINVNO() )
- endif
- return iif( MINVNO() = 0, 0, 2 )
-
- //*****************************************************************
-
- function INVCLEAR
- // Calls:
- // Called By: INVMAIN INVEDIT INVADD INVDEL BODYINIT
-
- // I N V C L E A R
- local OLDINVNO
-
- OLDINVNO := MINVNO()
-
- MINVNO( 0 )
- MSPEEDO( 0 )
- MFUEL( 0 )
- MPARTDISC( 0 )
- MLABOUR1( 0.00 )
- MLABOUR2( 0.00 )
- MLABOUR3( 0.00 )
- MLABOUR4( 0.00 )
- MLABOURT( 0.00 )
- MINSLAB( 0.00 )
- MOWNLAB( 0.00 )
- MINSPART( 0.00 )
- MOWNPART( 0.00 )
- MINSSPEC( 0.00 )
- MOWNSPEC( 0.00 )
- MINSAMT( 0.00 )
- MOWNAMT( 0.00 )
- MEXCESS( 0.00 )
- MCONTRIB( 0.00 )
- MINSDUE( 0.00 )
- MOWNDUE( 0.00 )
- MINVTOTAL( 0.00 )
- IPDSCNT( 0.00 )
- OPDSCNT( 0.00 )
- ISUBTOT( 0.00 )
- OSUBTOT( 0.00 )
- IVATAMT( 0.00 )
- OVATAMT( 0.00 )
- INSSUB( 0.00 )
- OWNSUB( 0.00 )
- MVATRATE( QBVAT() )
-
- MOWNADD1( space(30 ) )
- MOWNADD2( space(30 ) )
- MOWNADD3( space(30 ) )
- MMAKEMODEL( space(30 ) )
- MINSCO( space(30 ) )
- MINSADD1( space(30 ) )
- MINSADD2( space(30 ) )
- MINSENG( space(30 ) )
- MINSTEL( space(30 ) )
- ML2TEXT( space(30 ) )
- ML3TEXT( space(30 ) )
- ML4TEXT( space(30 ) )
- MENGNO( space(30 ) )
- MCHASNO( space(30 ) )
- MOWNNAME( space(24 ) )
- MCLAIMNO( space(15 ) )
- MPAINT( space(12 ) )
- MTRIM( space(12 ) )
- MOWNTELH( space(12 ) )
- MOWNTELB( space(12 ) )
- MESTNO( space(12 ) )
- MLABESTNO( space(12 ) )
- MREGNO( space(8 ) )
- MYEAR( space(7 ) )
- MOWNINIT( space(6 ) )
- MCUSTTYP( space(4 ) )
- MACTYPE( space(1 ) )
- MWORKTYPE( space(1 ) )
-
- MOWNVAT( .f. )
- MINSTOPAY( .f. )
-
- MDATEIN( date() )
- MDATEOUT( ctod("" ) )
- MDATEINV( ctod("" ) )
-
- return( OLDINVNO )
-
- //*****************************************************************
-
- function INVADD( NEWINV ) // Amended by SUMMER93
- // Calls: QBPROMPT INVNEW NEWNUM QBREAD INVCLEAR
- // Called By: INVEDIT
- // get a new invoice number
- local INVACT, GETLIST
- // These locals cover set/get variables where lvalues are needed
- local MINVNO
- GETLIST := {}
-
- GETOUT( .f. )
-
- select PARTLINE
- zap
- select INVOICE
- INVACT := QBPROMPT( "Automatic|Manual|", ;
- "Choose Method of generating new Invoice - ESC to Quit", 1 )
- do case
- case INVACT = 0 .or. GETOUT()
- return 0
- case INVACT = 1
- // Get new Invoice number
- AUTOADD( .t. )
- do INVNEW with .f.
- case INVACT = 2
- // GET command amended to ...
- MINVNO := MINVNO()
- @ 2, 73 get MINVNO picture "99999" ;
- WHEN { || MINVNO := MINVNO(), .t. } ;
- valid { || MINVNO( MINVNO ) != NIL .and. NEWNUM(.t. ) }
- do QBREAD with "Input new Invoice number", ;
- "It must not already exist" , @GETLIST
- // Call amended
- AUTOADD( .f. )
- if GETOUT()
- MINVNO( 0 )
- endif
- endcase
-
- MINVNO( INVCLEAR( ) )
- return( MINVNO() )
-
- //*****************************************************************
-
- function INVSAVE
- // Calls: INVNEW QBADBLNK PARTSAVE
- // Called By: INVEDIT
-
- // I N V S A V E
- local PINVNO, GO_REC
-
- select INVOICE
- use INVOICE
- set softseek off
- set index to INVNUM, INVDATE, INVCUST, INVNAME
- seek str( MINVNO() , 5 )
- if eof( )
- if AUTOADD()
- do INVNEW with .t.
- endif
- select INVOICE
- go top
- if INVOICE->INVNO <> 0 .or. reccount( ) = 0
- do QBADBLNK with 10
- go top
- endif
-
- endif
-
- replace INVOICE->INVNO with MINVNO() , INVOICE->SPEEDO with MSPEEDO() , ;
- INVOICE->FUEL with MFUEL() , INVOICE->PARTDISC with MPARTDISC()
- replace INVOICE->VATRATE with MVATRATE() , INVOICE->OWNNAME with MOWNNAME() , ;
- INVOICE->OWNADD1 with MOWNADD1() , INVOICE->OWNADD2 with MOWNADD2()
- replace INVOICE->OWNADD3 with MOWNADD3() , INVOICE->MAKEMODEL with ;
- MMAKEMODEL() , INVOICE->INSCO with MINSCO() , INVOICE->INSADD1 with ;
- MINSADD1()
- replace INVOICE->INSADD2 with MINSADD2() , INVOICE->INSENG with MINSENG() , ;
- INVOICE->INSTEL with MINSTEL() , INVOICE->PAINT with MPAINT()
- replace INVOICE->OWNTELH with MOWNTELH() , INVOICE->OWNTELB with MOWNTELB() , ;
- INVOICE->OWNVAT with MOWNVAT() , INVOICE->INSTOPAY with MINSTOPAY()
- replace INVOICE->ACTYPE with MACTYPE() , INVOICE->WORKTYPE with MWORKTYPE() , ;
- INVOICE->trim with MTRIM()
- replace INVOICE->DATEIN with MDATEIN() , INVOICE->DATEOUT with MDATEOUT() , ;
- INVOICE->DATEINV with MDATEINV()
- replace INVOICE->REGNO with MREGNO() , INVOICE->year with MYEAR() , INVOICE->;
- ENGNO with MENGNO()
- replace INVOICE->CHASNO with MCHASNO() , INVOICE->ESTNO with MESTNO() , ;
- INVOICE->LABESTNO with MLABESTNO() , INVOICE->CLAIMNO with MCLAIMNO()
- replace INVOICE->LABOUR1 with MLABOUR1() , INVOICE->LABOUR2 with MLABOUR2() , ;
- INVOICE->LABOUR3 with MLABOUR3() , INVOICE->LABOUR4 with MLABOUR4()
- replace INVOICE->LABOURT with MLABOURT() , INVOICE->INSLAB with MINSLAB() , ;
- INVOICE->OWNLAB with MOWNLAB() , INVOICE->INSPART with MINSPART()
- replace INVOICE->OWNPART with MOWNPART() , INVOICE->INSSPEC with MINSSPEC() , ;
- INVOICE->OWNSPEC with MOWNSPEC() , INVOICE->INSAMT with MINSAMT()
- replace INVOICE->OWNAMT with MOWNAMT() , INVOICE->EXCESS with MEXCESS() , ;
- INVOICE->CONTRIB with MCONTRIB() , INVOICE->INSDUE with MINSDUE()
- replace INVOICE->OWNDUE with MOWNDUE() , INVOICE->INVTOTAL with MINVTOTAL()
- replace INVOICE->CUSTTYPE with MCUSTTYP() , INVOICE->OWNINIT with MOWNINIT()
- replace INVOICE->L2TEXT with ML2TEXT() , INVOICE->L3TEXT with ML3TEXT() , ;
- INVOICE->L4TEXT with ML4TEXT()
- GO_REC := recno( )
- set index to INVNUM
- go GO_REC
-
- // Partline save goes in here
- PINVNO := MINVNO()
- do PARTSAVE with PINVNO
-
- select INVOICE
-
- return iif( MINVNO() = 0, 0, 2 )
-
- //*****************************************************************
-
- function INVFIND( OKNEW ) // Amended by SUMMER93
- // Calls: GINVNO SINVNO INVFILL INVGET PARTSHOW INVTOT
- // Called By: INVMAIN
- local ISTAT
-
- ISTAT := 0
- GETOUT( .f. )
-
- MINVNO( GINVNO( OKNEW ) )
-
- if MINVNO() <> 0
- SINVNO( )
- ISTAT := INVFILL( .t. )
- do INVGET with .f.
- do PARTSHOW with 15, 1, 10
- do INVTOT
- endif
-
- return ISTAT
-
- //*****************************************************************
-
- procedure INVDEL( PINVNO ) // Amended by SUMMER93
- // Calls: QBYESNO QBWIPE PARTDEL INVCLEAR QBMESS
- // Called By: INVMAIN
-
- if QBYESNO( "Delete this Invoice?" ) = "Y"
- select INVOICE
- set index to INVNUM, INVDATE, INVCUST, INVNAME
- seek str( PINVNO, 5 )
- if found( )
- do QBWIPE
- do PARTDEL with PINVNO
- INVCLEAR( )
- endif
- set index to INVNUM
- else
- do QBMESS with "Invoice retained", COLFLASH() , 5
- endif
-
- return
-
- //*****************************************************************
-
- procedure INVTOTAL( DOPART ) // Amended by SUMMER93
- // Calls:
- // Called By: REPREV REPWIP INVTOT
- // These locals cover set/get variables where lvalues are needed
- local SUMPART
- // Sum of the parts
- // Sum of specialist
- if DOPART
- select PARTLINE
- if reccount( )> 0
- set deleted on
- SUMPART := SUMPART()
- sum FIELD->TPRICE to SUMPART // for PARTSPEC="P" .or. PARTSPEC=" "
- SUMPART(SUMPART)
- else
-
- SUMPART( 0 )
- endif
- if MINSTOPAY()
- MINSPART( SUMPART() )
-
- MOWNPART( 0 )
- MOWNSPEC( 0 )
- else
- MOWNPART( SUMPART() )
-
- MINSPART( 0 )
- MINSSPEC( 0 )
- endif
- select INVOICE
- endif
-
-
- if MINSTOPAY()
-
- MOWNLAB( 0 )
- MOWNPART( 0 )
- MOWNSPEC( 0 )
- OSUBTOT( 0 )
- OPDSCNT( 0 )
- MOWNAMT( 0 )
- MINSLAB( MLABOURT() )
- MINSAMT( MINSLAB() + MINSPART() + MINSSPEC() )
- IPDSCNT( MINSPART() * MPARTDISC() / 100 )
- ISUBTOT( MINSAMT() - IPDSCNT() )
- if MOWNVAT()
- IVATAMT( 0 )
- OVATAMT( ISUBTOT() * ( MVATRATE() / 100 ) )
- else
- IVATAMT( ISUBTOT() * ( MVATRATE() / 100 ) )
- OVATAMT( 0 )
- endif
- INSSUB( ISUBTOT() + IVATAMT() )
- MINSDUE( max( (INSSUB() - MEXCESS() - MCONTRIB() ), 0 ) )
- OWNSUB( min( MEXCESS() + MCONTRIB() , ISUBTOT() ) )
- MOWNDUE( OVATAMT() + OWNSUB() )
- else
-
- MINSLAB( 0 )
- MINSPART( 0 )
- MINSSPEC( 0 )
- MCONTRIB( 0 )
- MEXCESS( 0 )
- ISUBTOT( 0 )
- IPDSCNT( 0 )
- MINSDUE( 0 )
- MINSAMT( 0 )
- INSSUB( 0 )
- MOWNLAB( MLABOURT() )
- MOWNAMT( MOWNLAB() + MOWNPART() + MOWNSPEC() )
- OPDSCNT( MOWNPART() * MPARTDISC() / 100 )
- OSUBTOT( MOWNAMT() - OPDSCNT() )
- OVATAMT( OSUBTOT() * ( MVATRATE() / 100 ) )
- OWNSUB( OSUBTOT() )
- MOWNDUE( OSUBTOT() + OVATAMT() )
- endif
-
- return
-
- //*************************************************************
-
- procedure INVREN
- // Calls: QBCLMESS NEWNUM QBREAD QBYESNO QBMESS
- // Called By: INVEDIT
- // Renumber an Invoice
- local OLDNUM, GO_REC, GETLIST
- // These locals cover set/get variables where lvalues are needed
- local MINVNO
- GETLIST := {}
-
- OLDNUM := MINVNO()
- MINVNO( 0 )
-
- do QBCLMESS
- select INVOICE
-
- @ 2, 0 say "Old Invoice number: " + str( OLDNUM, 5 )
- @ 2, 53 say "New invoice number: "
- do while .t.
- // GET command amended to ...
- MINVNO := MINVNO()
- @ 2, 73 get MINVNO picture "99999" WHEN { || MINVNO := MINVNO(), .t. } ;
- valid { || MINVNO( MINVNO ) != NIL .and. NEWNUM(.t. ) }
- do QBREAD with "Input NEW Invoice number", "" , GETLIST
- // Call amended
- if GETOUT()
- MINVNO( OLDNUM )
- return
- endif
- if QBYESNO( "New Number OK?" ) = "Y"
- exit
- endif
- enddo
-
- // renumber the Invoice
-
- do QBMESS with "Renumbering Invoice and Parts", COLFLASH() , 0
-
- GO_REC := recno( )
- set index to INVNUM, INVDATE, INVCUST, INVNAME
- seek str( OLDNUM, 5 )
- if !eof( )
- replace INVOICE->INVNO with MINVNO()
- endif
- set index to INVNUM
- go GO_REC
-
- // do the Parts (like delete)
- select PARTS
- seek str( OLDNUM, 5 )
- do while !eof( )
- replace PARTS->INVNO with MINVNO()
- seek str( OLDNUM, 5 )
- enddo
-
- select PARTLINE
- replace FIELD->INVNO with MINVNO() all
-
- do QBCLMESS
- @ 2, 0 clear to 2, 79
- @ 02, 61 say "Invoice no:"
- @ 2, 73 say MINVNO() picture "99999"
-
- return
-
- //*************************************************************
-
- procedure INVNEW( DOIT ) // Amended by SUMMER93
- // Calls: NEWNUM
- // Called By: INVADD INVSAVE
-
- select 0
- use QBINFO index QBINFO
- seek "LASTINV"
- if DOIT
- replace FIELD->QBTEXT with str( MINVNO() , 5 )
- else
- if found( )
- MINVNO( val( trim(FIELD->QBTEXT )) + 1 )
- do while !NEWNUM( .f. )
- MINVNO( MINVNO() + 1 )
- enddo
- else
- MINVNO( 1000 )
- append blank
- replace FIELD->QBINFKEY with "LASTINV"
- endif
- endif
- use
-
- return
-
- // End of file
-